/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __4C6753F9_63ED_4b4c_A3BF_6E1436FE78FC__
#define __4C6753F9_63ED_4b4c_A3BF_6E1436FE78FC__

#include "../tools/head.h"
#include "include_odbc.h"
#include "err_info.h"
#include "i_stmt.h"

namespace xos_odbc
{

    class odbc_connect : public xos_stl::mem_item< xos::release_impl< odbc_connect >, thread_lock >,
		public i_connect
    {
    public:
        typedef xos::release_impl< odbc_connect > T;

    public:
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //
        static int get_xos_item_data( ITEM_DATA*& item_ptr );

    public:
        odbc_connect();
        ~odbc_connect();

    public:
        // 
        // 利用不同数据库的功能生成对应sql放在lpszSql中，得到最后新增记录的自增ID。
        // 成功返回0,结果在lpIntId中
        // 
        int get_last_insert_id( const char * lpszSql, int * lpIntId );

        // 
        // 生成i_recordset
        // 
        i_recordset * recordset( i_recordset ** ppv );

        // 
        //  0 : success. 
        //  1 : running. 
        // -1 : failed
        // 
		int end_trans( bool bCommit );

        // 
        //  0 : success. 
        //  1 : running. 
        // -1 : failed
        // 
		int begin_trans();

        // 
        //  0 : success. 
        //  1 : running. 
        // -1 : failed
        // 
        int connect();

    public:
        int set_connect_info( void * hWnd, const char * lpszConStr );
        int create_stmt( i_stmt ** ppv );
        int set_handle( SQLHANDLE hDbc );
        int init();
        int term();

    private:
        int init_data();

    private:
        std::string m_out_con_str;
        std::string m_con_str;
        SQLHWND m_hWnd;

        SQLHANDLE m_hDbc;
		err_info m_err;

    };

} // xos_odbc

#endif // __4C6753F9_63ED_4b4c_A3BF_6E1436FE78FC__
